package com.example.express.dao;

import com.example.express.bean.Express;
import com.example.express.exception.DuplicateCodeException;

import java.util.List;
import java.util.Map;

public interface BaseExpressDao {

    /**
     * 用于查询全部快递（总数+新增），代取件（总数+新增）
     * @return[{size:总数,day:新增},{size:总数,day:新增}]
     */
    public List<Map<String,Integer>> console();

    /**
     * 分页查询全部快递信息
     * @param limit
     * @param offset
     * @param pageNum
     * @return[Express{快递信息}]
     */
    public List<Express> findAll(boolean limit,int offset,int pageNum);

    /**
     * 根据单号查询快递信息
     * @param number
     * @return {快递信息}
     */
    public Express findByNumber(String number);

    /**
     * 根据取件码查询快递信息
     * @param code
     * @return {快递信息}
     */
    public Express findByCode(String code);

    /**
     * 根据用户手机号查询快递信息
     * @param userPhone
     * @return [Express{快递信息}]
     */
    public List<Express> findByUserPhone(String userPhone);

    public List<Express> findByUserPhoneAndStatus(String userPhone,int status);

    /**
     * 根据录入人手机号查询快递信息
     * @param sysPhone
     * @return [Express{快递信息}]
     */
    public List<Express> findBySysPhone(String sysPhone);

    /**
     * 录入快递信息
     * @param e
     * @return 返回true则表示录入成功，false录入失败
     * @throws DuplicateCodeException
     */
    public boolean insert(Express e) throws DuplicateCodeException;

    /**
     * 根据id更新快递信息
     * @param id
     * @param newExpress
     * @return
     */
    public boolean update(int id,Express newExpress);

    /**
     * 更新快递状态为1表示取件完成
     * @param code
     * @return 返回true表示更新成功，false则表示更新失败
     */
    public boolean updateStatus(String code);

    /**
     * 根据id删除快递信息
     * @param id
     * @return 返回true表示删除成功，false表示失败
     */
    public boolean delete(int id);
}
